package cn.b.sky.mes.hr.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.b.sky.mes.hr.dao.PersonnelTypeAssignDao;
import cn.b.sky.mes.hr.model.PersonnelTypeAssign;
import cn.b.sky.mes.hr.model.condition.PersonnelTypeAssignCondition;
import cn.b.sky.mes.hr.service.PersonnelTypeAssignService;
import cn.b.sky.common.constants.SystemConstant;
import cn.b.sky.common.utils.DatabaseUtils;

@Service("personnelTypeAssignService")
public class PersonnelTypeAssignServiceImpl implements PersonnelTypeAssignService {

  private static final Logger LOG = LoggerFactory.getLogger(PersonnelTypeAssignServiceImpl.class);

  @Autowired
  PersonnelTypeAssignDao personnelTypeAssignDao;

  @Override
  public List<PersonnelTypeAssign> getPersonnelTypeAssignsByCondition(PersonnelTypeAssignCondition condition) {
    if (condition == null) {
      return null;
    }
    if (StringUtils.isBlank(condition.getOrderField())) {
      condition.setOrderField("personnelCode");//人员编号排序
    }
    return personnelTypeAssignDao.selectPTAByCondition(condition);
  }

  @Override
  public int getPersonnelTypeAssignCountByCondition(PersonnelTypeAssignCondition condition) {
    if (condition == null) {
      return 0;
    }
    return personnelTypeAssignDao.selectPTACountByCondition(condition);
  }

  @Override
  public PersonnelTypeAssign getPersonnelTypeAssignByPk(String personnelCode, String personnelTypeCode, String siteCode) {
    if (StringUtils.isBlank(personnelCode) || StringUtils.isBlank(personnelTypeCode)) {
      return null;
    }
    return personnelTypeAssignDao.selectPTAByCode(siteCode, personnelCode, personnelTypeCode);
  }

  @Override
  public void savePersonnelTypeAssign(PersonnelTypeAssign personnelTypeAssign) {
    if (personnelTypeAssign != null && !personnelTypeAssign.isNullObject()) {
      if (personnelTypeAssign.getDefaultTypeFlag() == 1) {
        //保存之前先去修改人员之前的默认类型标记，始终以最新的标志为主
        personnelTypeAssignDao.updateDefaultTypeFlag(personnelTypeAssign.getSiteCode(),
            personnelTypeAssign.getPersonnelCode());
      }
      personnelTypeAssignDao.insertPTA(personnelTypeAssign);
    }
  }

  @Override
  public String deletePersonnelTypeAssignByPk(String personnelCode, String personnelTypeCode, String siteCode) {

    if (StringUtils.isBlank(personnelCode) || StringUtils.isBlank(personnelTypeCode)) {
      return null;
    }
    String message = null;
    try {
      personnelTypeAssignDao.deletePTA(siteCode, personnelCode, personnelTypeCode);
    } catch (Exception e) {
      LOG.error("{}", e);
      String errorMsg = e.getMessage();
      if ((DatabaseUtils.isConstraintsError(errorMsg))) {
        // 外键删除已存在提示
        message = SystemConstant.DATABASE_OPERATION_FK;
      } else {
        message = SystemConstant.DWZ_CODE_ERROR_MESSAGE;
      }
    }
    return message;
  }

  @Override
  public void modifyPersonnelTypeAssign(PersonnelTypeAssign pta) {
    if (pta != null && !pta.isNullObject()) {
    //保存之前先去修改人员之前的默认类型标记，始终以最新的标志为主
      personnelTypeAssignDao.updateDefaultTypeFlag(pta.getSiteCode(),
          pta.getPersonnelCode());
      personnelTypeAssignDao.updatePTA(pta);
    }

  }

  @Override
  public List<PersonnelTypeAssign> getPersonnelTypeAssignsByPersonnel(String siteCode, String personnelCode) {
    return personnelTypeAssignDao.getPTAsByPersonnel(siteCode, personnelCode);
  }

}
